package com.banesco.precargadepositos.interfaz.vistas;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.graphics.Color;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.banesco.precargadepositos.comun.recursos.Recursos;
import com.banesco.precargadepositos.interfaz.contratos.IBase;
import com.banesco.precargadepositosandroid.R;

/**
 * Vista que  permite realizar el manejo de los componentes de la ventana base
 * @author Juan Carlos Coello
 * Trascend NC - 09/2013
 */
public class Base extends Activity implements IBase {

	private FrameLayout _contenido;
	private ProgressDialog _progressDialog;

	/**
	 * Metodo que devuelve true si el dispositivo no esta en modo avion
	 */
	@Override
	public boolean IsOnline()
	{
		ConnectivityManager connMgr = (ConnectivityManager) 
				getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
		return (networkInfo != null && networkInfo.isConnected());
	} 

	/**
	 * Metodo que devuelve true si el dispositivo esta en wifi
	 */
	@Override
	public boolean IsWiFi()
	{
		ConnectivityManager connMgr = (ConnectivityManager) 
				getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
		return networkInfo.isConnected();				
	}

	/**
	 * Metodo que devuelve true si el dispositivo esta en rede de datos moviles
	 */
	@Override
	public boolean IsMobile()
	{
		ConnectivityManager connMgr = (ConnectivityManager) 
				getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
		return networkInfo.isConnected();
	}

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		super.setContentView(R.layout.activity_base);
		_contenido = (FrameLayout)findViewById(R.id.baseFlMainContent);
	}

	public void setContentView(int id, CharSequence tituloApp) {
		LayoutInflater inflater = (LayoutInflater)getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		inflater.inflate(id, _contenido);

		TextView tvTitulo = (TextView)findViewById(R.id.baseTvTitulo);
		tvTitulo.setText(tituloApp);
	}

	/**
	 * Metodo que devuelve el context de la vista
	 */
	@Override
	public Context getContext() {
		return this;
	}

	/**
	 * Metodo que genera un aviso en el hilo de la interfaz
	 */
	@Override
	public void createToastOnUiThread(final String text) {
		runOnUiThread(new Runnable() {
			@Override
			public void run() {
				Toast.makeText(getContext(), text, Toast.LENGTH_LONG).show();
			}
		});

	}

	/**
	 * Metodo que genera un aviso
	 */
	@Override
	public void createToast(String text) {
		Toast.makeText(getContext(), text, Toast.LENGTH_LONG).show();
	}

	/**
	 * Metodo que genera el pop up de espera mientras se ejecuta un proceso determinado
	 */
	@Override
	public void showProgressDialog(Context context, String title, String message) {
		_progressDialog = new ProgressDialog(context);
		_progressDialog.setTitle(title);
		_progressDialog.setMessage(message);
		_progressDialog.show();
	}

	/**
	 * Metodo que ciera el pop up de espera
	 */
	@Override
	public void dismissProgressDialog() {
		_progressDialog.dismiss();
	}

	/**
	 * Metodo que asigna propiedades a los spinners de la app
	 * @param selectedItemView
	 * @param enabled , true si esta activado el spinner
	 */
	public void setSpinnerAdapterProperties(View selectedItemView, boolean enabled) {
		TextView tv = ((TextView) selectedItemView);
		tv.setGravity(Gravity.CENTER);
		tv.setTextColor(enabled ? Color.parseColor(Recursos.TEXT_COLOR_SPINNERS_EDIT_TEXT) : Color.parseColor(Recursos.TEXT_COLOR_SPINNERS_EDIT_TEXT_DISABLED));
		tv.setTextSize(Recursos.TEXT_SIZE_SPINNERS_EDIT_TEXT);
	}
	
	/**
	 * Metodo que cierra la aplicacion sin matar el proceso de la misma
	 */
	public void salir() {
		finish();
		moveTaskToBack(true);
	}
}

